home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / zousan / src / tifload.c < prev    next >
Text File  |  1994-06-01  |  4KB  |  137 lines

  1. /*
  2.  *   tifload  ---  TIFFローダー        by N.Takahashi
  3.  *
  4.  *   'tiff2.c'の使い方を知るためのサンプルプログラム
  5.  *
  6.  *   使い方:  run386 tifload <TIFF_file1> [<TIFF_file2>]
  7.  *
  8.  *     例1. TIFF画像データを表示する
  9.  *             run386 tifload sample.tif
  10.  *
  11.  *     例2. TIFF画像データを圧縮して保存する
  12.  *             run386 tifload sample.tif compress.tif
  13.  *          (sample.tifは、圧縮/非圧縮どちらでも可)
  14.  */ 
  15.  
  16. #include <stdio.h>
  17. #include <stdlib.h>
  18. #include <conio.h>
  19. #include <string.h>
  20. #include <ctype.h>
  21. #include <dos.h>
  22. #include <fcntl.h>
  23. #include <EGB.h>
  24.  
  25. #include "tiff2.h"        /* これをincludeする */
  26. #include "graph.h"        /* グラフィック表示のため */
  27.  
  28. /* Compile 方法 */
  29. /*   hcc tifload tiff2 graph -stack 200000   */
  30.                         /* hccとは、FSW4収録のコンパイラドライバCC(くり氏作)を
  31.                            HighC1.7対応に変更したものです。 くり様には、
  32.                            大変感謝しています。
  33.                            CCは、タイムスタンプ比較機能を持っていますので、
  34.                            ちょっとしたプログラミングには便利かと思います。
  35.                            ちなみに、上のように記述しておくと私の環境では、
  36.                            ctrl+PF9でコンパイルをしてくれます。
  37.                          */
  38.  
  39. PALETTE16 *Pal16;
  40. PALETTE256 *Pal256;
  41.  
  42. char *Gdata,*Gpal;    /* 画像データ&パレット */
  43. int SizX;            /* 横サイズ */
  44. int SizY;            /* 縦サイズ */
  45. int Gcol=0;            /* 色数     */
  46.  
  47. char *Sv=NULL;
  48.  
  49.  
  50. /* パレット調整 */
  51. void adj_palette( char *pal, int col ) {
  52. int i;
  53.     if( pal!=NULL ) {
  54.         for( i=0; i<col*3; i++ ) {
  55.             *((unsigned short *)pal+i)=*((unsigned short *)pal+i)>>8;
  56.         }
  57.     }
  58. }
  59.  
  60.  
  61. void main( int argc, char *argv[] ) {
  62. Tiff *tp;
  63. int i,rt;
  64.  
  65.     if( argc<2 || argc>3 ) {
  66.         printf( "usage: run386 tifload.exp <tiff_file> <save_file>\n" );
  67.         exit( 1 );
  68.     }
  69.     if( argc==3 )
  70.         Sv=argv[2];
  71.  
  72.     tp=Tiff_new();                    /* Tiff_xxx関数の使用準備 */
  73.     
  74.     rt=Tiff_load( argv[1], tp );    /* Tiffデータを読み込む */
  75.     if( rt!=0 ) {
  76.         printf( "%s : %s\n", argv[1], Tiff_err[rt] ); /* エラーメッセージ */
  77.         exit( 1 );
  78.     }
  79.     Tiff_decompress( tp );            /* Tiff展開 */
  80.     
  81.     Tiff_make_palette( tp );        /* パレットがない場合に作成する */
  82.     
  83.     Tiff_getgraph( &SizX, &SizY, &Gcol, &Gdata, &Gpal, tp );
  84.                                     /* 画像情報を取り出す */
  85.                                     
  86.     if( Sv==NULL ) {
  87.         adj_palette( Gpal, Gcol );    /* Tiffパレットの調整 */
  88.                                     /* Tiff_load直後のパレットデータは、
  89.                                        そのままでは使いにくい             */
  90.         
  91.         if( Gcol==16 ) {            /* 16色のときの画面設定 */
  92.             Pal16=(PALETTE16 *)Gpal;
  93.             G_screen( 3, 0 );
  94.             G_screen( 3, 1 );
  95.             G_active( 1, 2, 1 );
  96.             for( i=0; i<16; i++ ) {
  97.                 G_palette( 
  98.                     i, Pal16->green[i], Pal16->red[i], Pal16->blue[i], 1
  99.                  );
  100.             }
  101.             G_enlarge( 1, 1, 0, 0, 640, 480 );
  102.         }
  103.         else if( Gcol==256 ) {        /* 256色のときの画面設定 */
  104.             Pal256=(PALETTE256 *)Gpal;
  105.             G_screen( 12, 0 );
  106.             G_active( 0, 1, 0 );
  107.             for( i=0; i<256; i++ ) {
  108.                 G_palette( 
  109.                     i, Pal256->green[i], Pal256->red[i], Pal256->blue[i], 0
  110.                  );
  111.             }
  112.             G_enlarge( 1, 1, 0, 0, 640, 480 );
  113.         }
  114.         else if( Gcol==32768 ) {    /* 32768色のときの画面設定 */
  115.             G_screen( 10, 0 );
  116.             G_screen( 10, 1 );
  117.             G_active( 1, 2, 1 );
  118.             G_enlarge( 2, 2, 0, 0, 320, 240 );
  119.         }
  120.  
  121.         G_put( 0,0, SizX-1,SizY-1, Gdata );        /* 画像表示 */
  122.         _getch();                                /* 何かキーを押すまで待つ */
  123.     }
  124.  
  125.     if( Sv!=NULL ) {
  126.         Tiff_compress( tp );        /* Tiff圧縮 */
  127.         rt=Tiff_save( Sv, tp );        /* Tiffデータを書き出す */
  128.         if( rt!=0 ) {
  129.             printf( "%s : %s\n", Sv, Tiff_err[rt] );    /* エラーメッセージ */
  130.             exit( 1 );
  131.         }
  132.     }
  133.  
  134.     Tiff_delete( tp );                /* Tiff_xxx関数の使用終了 */
  135.     G_dosterm();                    /* DOS画面に戻す */
  136. }
  137.